]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
telepathyClient: Delay notification in case it gets acked
authorXavier Claessens <xclaesse@gmail.com>
Mon, 22 Aug 2011 14:23:50 +0000 (16:23 +0200)
committerXavier Claessens <xclaesse@gmail.com>
Mon, 22 Aug 2011 17:18:31 +0000 (19:18 +0200)
The shell should only notify in case no other client handles the message.
Empathy will ack the message if focused, so we don't want to step on its
toes.

js/ui/telepathyClient.js

index 4e2a95c21046253d811b6e556fdbdc383346fc27..de88c333153cd4383375bd35de4b840d0761eaea 100644 (file)
@@ -358,6 +358,7 @@ ChatSource.prototype = {
 
         this._notification = new ChatNotification(this);
         this._notification.setUrgency(MessageTray.Urgency.HIGH);
+        this._notifyTimeoutId = 0;
 
         // We ack messages when the message box is collapsed if user has
         // interacted with it before and so read the messages:
@@ -519,7 +520,22 @@ ChatSource.prototype = {
 
         message = makeMessageFromTpMessage(message, NotificationDirection.RECEIVED);
         this._notification.appendMessage(message);
-        this.notify();
+
+        // Wait a bit before notifying for the received message, a handler
+        // could ack it in the meantime.
+        if (this._notifyTimeoutId != 0)
+            Mainloop.source_remove(this._notifyTimeoutId);
+        this._notifyTimeoutId = Mainloop.timeout_add(500,
+            Lang.bind(this, this._notifyTimeout));
+    },
+
+    _notifyTimeout: function() {
+        if (this._pendingMessages.length != 0)
+            this.notify();
+
+        this._notifyTimeoutId = 0;
+
+        return false;
     },
 
     // This is called for both messages we send from